home *** CD-ROM | disk | FTP | other *** search
- 5000 REM RPN calculator program
- 5010 CLS:LOCATE 2,5
- 5020 PRINT"use <CR> for enter"
- 5030 PRINT" * for multiplication"
- 5040 PRINT" / for division"
- 5050 PRINT" Q for square root"
- 5060 PRINT" S for sine"
- 5070 PRINT" C for cosine"
- 5080 PRINT" T for tangent"
- 5090 PRINT" E for e to the x"
- 5100 PRINT" N for log(e) x"
- 5110 PRINT" L for log(10) x"
- 5120 '
- 5122 '
- 5124 '
- 5126 '
- 5128 '
- 5129 PRINT" D to delete entry"
- 5130 PRINT" <Esc> to end program"
- 5140 '
- 5150 KEY OFF: DEF SEG=&H40: POKE &H17,PEEK(&H17) OR 32 ' set numlock ON
- 5160 R=1.745329E-02: F$="########.###" 'degree radian conv. and format
- 5170 ' main key query section
- 5180 A$=INKEY$: IF A$="" THEN 5180 ELSE P=ASC(A$):LOCATE 23,10: PRINT P
- 5190 IF P>47 AND P<58 OR A$="." THEN 5210 ELSE 5230 'check for numbers
- 5200 ' update number entry
- 5210 N$=N$+A$: LOCATE 10,50: PRINT SPC(20);:LOCATE 10,50:PRINT N$;:GOTO 5180
- 5215 '
- 5220 ' arithmetic processing below here
- 5230 IF P=13 THEN 5240 ELSE 5270 'carriage return, enter data
- 5240 GOSUB 5260: GOTO 5450
- 5250 ' raise stack, re-position for function printout
- 5260 T=Z:Z=Y:Y=X: X=VAL(N$): N$="":LOCATE 9,50:PRINT SPC(10):LOCATE 9,50:RETURN
- 5270 IF N$="" THEN N$=STR$(X):X=Y:Y=Z:Z=T:T=0 'if no number pressed,lower stack
- 5275 '
- 5280 IF P=43 THEN GOSUB 5260: PRINT "+": X=X+Y:Y=Z:Z=T: GOTO 5450
- 5290 IF P=45 THEN GOSUB 5260: PRINT "-": X=Y-X:Y=Z:Z=T: GOTO 5450
- 5300 IF P=42 THEN GOSUB 5260: PRINT "x": X=Y*X:Y=Z:Z=T: GOTO 5450
- 5310 IF P=47 THEN GOSUB 5260: PRINT CHR$(246): X=Y/X:Y=Z:Z=T: GOTO 5450
- 5320 IF A$="Q" OR A$="q" THEN GOSUB 5260: PRINT CHR$(251): X=SQR(X): GOTO 5450
- 5330 IF A$="S" OR A$="s" THEN GOSUB 5260: PRINT "sin": X=SIN(X*R): GOTO 5450
- 5340 IF A$="C" OR A$="c" THEN GOSUB 5260: PRINT "cos": X=COS(X*R): GOTO 5450
- 5350 IF A$="T" OR A$="t" THEN GOSUB 5260: PRINT "tan": X=TAN(X*R): GOTO 5450
- 5360 IF A$="E" OR A$="e" THEN GOSUB 5260: PRINT "exp": X=EXP(X): GOTO 5450
- 5370 IF A$="n" OR A$="N" THEN GOSUB 5260: PRINT "ln": X=LOG(X): GOTO 5450
- 5380 IF A$="L" OR A$="l" THEN GOSUB 5260: PRINT "log": X=LOG(X)/LOG(10):GOTO 5450
- 5382 '
- 5384 '
- 5386 '
- 5390 '
- 5398 IF A$="d" OR A$="D" THEN N$="":GOTO 5450 ELSE 5400
- 5400 GOSUB 5260 'if no valid function pressed re-raise stack
- 5410 IF ASC(A$)=27 THEN 5420 ELSE 5430 'check for Esc key
- 5420 DEF SEG=&H40:POKE &H17,PEEK(&H17) AND 223: CLS: KEY ON: END 'exit
- 5430 GOTO 5450
- 5440 '
- 5450 REM stack update to screen
- 5460 LOCATE 10,50: PRINT SPC(20)
- 5470 LOCATE 5,50: PRINT USING F$;T
- 5480 LOCATE 6,50: PRINT USING F$;Z
- 5490 LOCATE 7,50: PRINT USING F$;Y
- 5500 LOCATE 8,50: PRINT USING F$;X
- 5510 GOTO 5180
- T
- 548